package com.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.OrderBean;

import java.time.LocalDate;
import java.util.List;

public interface IOrderService {
    /**
     * 按用户ID分页查询订单商品集合
     * 1、从session中取出登陆用户信息
     * 2、按用户ID分页查询订单集合
     * 3、按日期降序排列
     * @param pageNum 页码
     @param userId 用户ID
      * @return 订单分页对象（订单号、下单时间、订单总价、订单状态）
     */
    public IPage<OrderBean> cutOrdersById(Integer pageNum,Integer userId);

    /**
     * 按订单ID查询订单信息
     * 1、按订单ID查询订单；
     * 2、同时查询出该订单的订单明细集合；
     * @param id 订单ID
     * @return 订单对象（订单编号、收货人、送货地址、收货人电话、下单时间、订单总价、订单状态、订单明细（商品编号、商品名、单价、购买数量））
     */
    public OrderBean findById(Integer id);

    /**
     * 完善订单资料（添加新订单）
     * 1、添加新订单（同时返回新订单ID）；
     * 从 session中取出登陆用户信息。按用户ID查询所有购物车，得到购物车集合。计算购物车总价，封装为订单总价，完成订单的添加。
     * 2、完成订单详情表的添加。
     * 3、根据用户ID，清空该用户相关购物车记录
     * @param order 订单对象（收货人、送货地址、收货人电话）
     */
    public void addOrder(OrderBean order);

    /**
     * 按订单状态（发货中）查询订单集合（送货员界面）
     * 1、按订单状态（发货中）查询订单集合
     * @return 订单对象集合（订单号、收货人、收获人电话、订单总价）
     */
    public List<OrderBean> findByStatus();

    /**
     * 结账（送货员界面）
     * 1、按订单编号修改订单状态为”已完结“
     * @param id 订单ID
     */
    public void updateStatusToFinish(Integer id);

    /**
     * 动态条件分页查询所有订单集合（管理员界面）
     * @param pageNum 页码
     * @param status 订单状态
     * @param startDate 下单起始日期
     * @param endDate 下单结束日期
     * @return 订单分页对象（订单号、下单时间、订单总价、订单状态）
     */
    public IPage<OrderBean> cutByItem(Integer pageNum, String status, LocalDate startDate, LocalDate endDate);

    /**
     * 发货（管理员界面）
     * 1、按订单编号修改订单状态为发货中
     * @param id 订单ID
     */
    public void updateStatusToSend(Integer id);
}
